package leetcode_200;

import java.util.ArrayList;
import java.util.List;

/**
 *@author 周杨
 *MinStack_155 最小栈操作 要求栈能保留每次栈内最小的值
 *describe:用数据结构保存 当前存入时  当前的最小值 这样每次最小值都能在栈顶获取 AC 99%
 *2018年6月6日 下午1:57:14
 */
public class MinStack_155 {
	List<Element> stack;
	int min;
	class Element{
		int val;
		int min;
		Element(int val,int min) {
			this.val=val;
			this.min=min;
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
	
	 public MinStack_155() {
	     this.stack=new ArrayList<Element>();
	     this.min=Integer.MAX_VALUE;
	 }
	    
	 public void push(int x) {
	      if(x<this.min) {//此元素小于当前最小值
	    	  this.stack.add(new Element(x, x));
	    	  this.min=x;
	      }
	      else {
	    	  this.stack.add(new Element(x, this.min));
	      }
	 }
	    
	 public void pop() {
	      this.stack.remove(this.stack.size()-1);
	      int now=peek();
	      if(now!=this.min)
	    	  this.min=now;
	 }
	 
	 public int peek() {
		 if(this.stack.size()==0)
			 return Integer.MAX_VALUE;
		 return this.stack.get(this.stack.size()-1).min;
	 }
	 
	    
	 public int top() {
	      return this.stack.get(this.stack.size()-1).val;  
	 }
	    
	 public int getMin() {
		 return this.min;  
	 }
	
	

}
